use rbatis::crud;
use rbatis::rbdc::DateTime;


#[macros::gen_dto]
#[derive(Clone, Debug, serde::Serialize, validator::Validate, serde::Deserialize)]
pub struct GenTable {
    /** 编号 */
    #[dto(update,vo)]
    pub table_id: Option<String>,

    /** 表名称 */
     #[validate(required(message = "表名称不能为空"))]
    #[dto(add,update,vo)]
    pub table_name: Option<String>,

    /** 表描述 */
     #[validate(required(message = "表描述不能为空"))]
    #[dto(add,update,vo)]
    pub table_comment: Option<String>,

    /** 关联父表的表名 */
    #[dto(add,update,vo)]
    pub sub_table_name: Option<String>,

    /** 本表关联父表的外键名 */
    #[dto(add,update,vo)]
    pub sub_table_fk_name: Option<String>,

    /** 实体类名称(首字母大写) */
     #[validate(required(message = "实体类名称不能为空"))]
    #[dto(add,update,vo)]
    pub class_name: Option<String>,

    /** 使用的模板（crud单表操作 tree树表操作 sub主子表操作） */
    #[dto(add,update,vo)]
    pub tpl_category: Option<String>,

    /** 前端类型（element-ui模版 element-plus模版） */
    #[dto(add,update,vo)]
    pub tpl_web_type: Option<String>,

    /** 生成包路径 */
     #[validate(required(message = "生成包路径不能为空"))]
    #[dto(add,update,vo)]
    pub package_name: Option<String>,

    /** 生成模块名 */
     #[validate(required(message = "生成模块名不能为空"))]
    #[dto(add,update,vo)]
    pub module_name: Option<String>,

    /** 生成业务名 */
     #[validate(required(message = "生成业务名不能为空"))]
    #[dto(add,update,vo)]
    pub business_name: Option<String>,

    /** 生成功能名 */
     #[validate(required(message = "生成功能名不能为空"))]
    #[dto(add,update,vo)]
    pub function_name: Option<String>,

    /** 生成作者 */
     #[validate(required(message = "作者不能为空"))]
    #[dto(add,update,vo)]
    pub function_author: Option<String>,
    /**
     * vue固定表头
     */
    #[dto(add,update,vo)]
    pub fixed_header: bool,

    /** 生成代码方式（0zip压缩包 1自定义路径） */
    #[dto(add,update,vo)]
    pub gen_type: Option<String>,

    /** 生成路径（不填默认项目路径） */
    #[dto(add,update,vo)]
    pub gen_path: Option<String>,

    /** 主键信息 */
    // fixme pub pkColumn :Option<GenTableColumn>,

    /** 子表信息 */
  //  pub sub_table: Option<GenTable>,

    /** 表列信息 */
    //  @Valid fixme
    //  pub List<GenTableColumn> columns,

    #[dto(add,update,vo)]
    pub options: Option<String>,
    #[dto(add)]
    pub create_by: Option<String>,
    #[dto(add)]
    pub create_time: Option<DateTime>,
    #[dto(update)]
    pub update_by: Option<String>,
    #[dto(update)]
    pub update_time: Option<DateTime>,
    #[dto(add,update,vo)]
    pub remark: Option<String>,
}
crud!(GenTable {});



//
// impl_select_page!(GenTable{select_page(dto: &crate::domain::system::dto::ConfigPageDTO) =>
//     "`where 1=1`
//     if dto.configName != '':
//       ` and config_name like #{'%'+dto.configName+'%'}`
//     if dto.configKey != '':
//       ` and config_key like #{'%'+dto.configKey+'%'}`
//     if dto.configType != '':
//       ` and config_type = #{dto.configType}`
//     if dto.status != '':
//       ` and status = #{dto.status}`
//     if dto.params.beginTime != '' && dto.params.beginTime != '':
//       ` and date_format(create_time,'%y%m%d') >= date_format(#{dto.params.beginTime},'%y%m%d')`
//     if dto.params.endTime != '' && dto.params.endTime != '':
//       ` and date_format(create_time,'%y%m%d') <= date_format(#{dto.params.endTime},'%y%m%d')`
//     if do_count == false:
//      ` order by create_time`"});
